package com.hifar.plat.AopOption;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Excel导入导出注解
 * 支持多种日期格式配置
 * @author system
 * @date 2025-01-XX
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Excel {
    
    /**
     * 列名
     */
    String name() default "";
    
    /**
     * 列排序
     */
    int sort() default 0;
    
    /**
     * 列宽度
     */
    int width() default 15;
    
    /**
     * 日期格式（支持多种格式，用逗号分隔）
     * 例如：format = "yyyy-MM-dd,yyyy/MM/dd,yyyy.MM.dd,yyyy年MM月dd日"
     */
    String format() default "";
    
    /**
     * 是否支持智能日期解析
     * 当为true时，会使用DateParseUtil.smartParseDate()进行解析
     */
    boolean smartDateParse() default false;
    
    /**
     * 是否必填
     */
    boolean required() default false;
    
    /**
     * 默认值
     */
    String defaultValue() default "";
    
    /**
     * 字典编码（用于数据字典转换）
     */
    String dictCode() default "";
    
    /**
     * 值映射配置（用于Excel值与数据库值的转换）
     * 格式：源值1:目标值1,源值2:目标值2
     * 例如：valueMapping = "日:1,周:2,年:3" 或 "有效:1,无效:0"
     */
    String valueMapping() default "";
    
    /**
     * 日期格式优先级（当smartDateParse为true时生效）
     * 可以指定优先使用的日期格式
     */
    String[] dateFormats() default {
        "yyyy-MM-dd",
        "yyyy/MM/dd", 
        "yyyy.MM.dd",
        "yyyy年MM月dd日",
        "MM/dd/yyyy",
        "dd/MM/yyyy",
        "yyyy-M-d",
        "yyyy/M/d",
        "yyyy.M.d",
        "yyyy年M月d日",
        "M/d/yyyy",
        "d/M/yyyy",
        "d-M-yyyy",
        "yyyyMMdd",
        "MMdd",
        "yyyy-MM-dd HH:mm:ss",
        "yyyy/MM/dd HH:mm:ss",
        "yyyy.MM.dd HH:mm:ss",
        "yyyy年MM月dd日 HH:mm:ss"
    };
}
